﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using DAO;
using DTO;
namespace BUS
{
    public class CTHoaDonBUS
    {
        public List<DTO.CTHoaDonDTO> LayChiTietHoaDon(int MaHD)
        {
            DAO.CTHoaDonDAO ct = new CTHoaDonDAO();
            return ct.LayChiTietHoaDon(MaHD);
        }
        public static OleDbDataAdapter LayTatCaCTHoaDon(int MaHD)
        {
            DAO.CTHoaDonDAO ct=new CTHoaDonDAO();
            return ct.LayTatCaCTHoaDon(MaHD);
        }
        public static System.Data.DataTable LayCTHoaDon(int MaHD)
        {
            DAO.CTHoaDonDAO ct = new CTHoaDonDAO();
            return ct.LayCTHoaDon(MaHD);
        }
        public int XoaCTHD(int MaHD)
        {
            DAO.CTHoaDonDAO ct = new CTHoaDonDAO();
            return ct.XoaCTHoaDon(MaHD);
        }
        public int XoaCTHD(int MaHD,int MaSP)
        {
            DAO.CTHoaDonDAO ct = new CTHoaDonDAO();
            return ct.XoaCTHoaDon(MaHD, MaSP);
        }
        public void XoaCTHD(CTHoaDonDTO cthdDTO)
        {
            try
            {
                BUS.CTHoaDonBUS cthdBUS = new CTHoaDonBUS();
                BUS.SanPhamBUS spBus = new SanPhamBUS();
                BUS.HoaDonBUS hdBUS = new HoaDonBUS();
                BUS.NhanVienBUS nvBUS = new NhanVienBUS();
                BUS.SoDuBUS sdBUS = new SoDuBUS();
                HoaDonDTO hdDTO_ = hdBUS.LayTTHD(cthdDTO.MaHD);
                HoaDonDTO hdDTO = new HoaDonDTO(hdDTO_);
                SoDuDTO sdDTO = new SoDuDTO();
                sdDTO.Ngay = hdDTO.NgayHD.AddMonths(1);
                sdDTO.MaSP = cthdDTO.MaSP;
                sdDTO.SoDu = -cthdDTO.SoLuong;
                sdBUS.CapNhatSoDu_TungSanPham(sdDTO);
                spBus.UpdateSLSP(cthdDTO.MaSP, -cthdDTO.SoLuong);
                hdDTO.ThanhTien -= cthdDTO.ThanhTien;
                hdBUS.UpdateHoaDon(hdDTO);
                nvBUS.UpdateNV(hdDTO.MaNV, -(cthdDTO.DiemCV));
                cthdBUS.XoaCTHD(cthdDTO.MaHD, cthdDTO.MaSP);
            }
            catch (Exception)
            {
                throw new Exception("Loi Khi Xoa Chi Tiet HoaDon");
            }
        }
        public void themCTvaoHDDaTonTai(CTHoaDonDTO cthd)
        {
            CTHoaDonBUS cthdBUS = new CTHoaDonBUS();
            HoaDonBUS hdBUS = new HoaDonBUS();
            SanPhamBUS spBUS = new SanPhamBUS();
            NhanVienBUS nvBUS = new NhanVienBUS();
            HoaDonDTO hddto = new HoaDonDTO(hdBUS.LayTTHD(cthd.MaHD));
            SoDuBUS sdBUS = new SoDuBUS();
            SoDuDTO sdDTO = new SoDuDTO();
            sdDTO.Ngay = hddto.NgayHD.AddMonths(1);
            sdDTO.MaSP = cthd.MaSP;
            sdDTO.SoDu = cthd.SoLuong;
            sdBUS.CapNhatSoDu_TungSanPham(sdDTO);
            hddto.ThanhTien += cthd.ThanhTien;
            cthdBUS.ThemCTHoaDon(cthd);
            hdBUS.UpdateHoaDon(hddto);
            spBUS.UpdateSLSP(cthd.MaSP, cthd.SoLuong);
            nvBUS.UpdateNV(hddto.MaNV, cthd.DiemCV);
        }
        public int ThemCTHoaDon(DTO.CTHoaDonDTO ct)
        {
            DAO.CTHoaDonDAO dao = new CTHoaDonDAO();
            return dao.ThemCTHoaDon(ct);
        }
        public double TongTien(int MaHD)
        {
            CTHoaDonDAO dao = new CTHoaDonDAO();
            return dao.TongTien(MaHD);
        }
        public double TongCV(int MaHD)
        {
            CTHoaDonDAO dao = new CTHoaDonDAO();
            return dao.TongCV(MaHD);
        }
        public CTHoaDonDTO laySPTrongHoaDon(int maHD, int maSP)
        {
            CTHoaDonDAO dao = new CTHoaDonDAO();
            return dao.laySPTrongHoaDon(maHD, maSP);
        }
    }
}
